#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    
    if( argc < 3 )
    {
        printf( "请输入至少两个图片名字" );
        exit( 0 );
    }

    //hand-make 1.txt
  int fd = open( argv[1], O_RDWR);
  if( fd < 0 )
  {
    printf( "Open %s fail", argv[1] );
    exit( 0 );
  }

  int fd1 = open( argv[2], O_RDWR | O_CREAT | O_TRUNC | O_APPEND , 0777);
  if( fd1 < 0 )
  {
    printf( "Open %s fail", argv[2] );
    exit(0);
  }

  char buf[4096] = { 0 };
  int ret ;
  while (( ret = read( fd, buf, sizeof( buf ) ) ) > 0 )
  {
    int bytes = 0;

    //图片中会有截止符'\0' 因此不能使用strlen(),写不完整
    while(bytes < ret)
    {
        //如果只使用ret作为write函数的size参数，这样不能确保读取的ret全都给录入
        //因为ret1可能系统中断或因为某些原因不能完全写入 
        //因此需要一个作以下操作
        //ret - bytes 还有多少个字符需要写入
        //buf + bytes 起始地址加上偏移量
        int ret1 = write( fd1, buf + bytes, ret - bytes);
        if( ret1 < 0 )
        {
            printf( "write %s fail", argv[2]);
            exit( 0 );
        }
        bytes += ret1;

    }
  }

  close( fd );
  close( fd1 );
  return 0;
}